package org.moyrax.nereyda.services.core
{
	import org.moyrax.nereyda.services.template.IServiceObject;
	
	import flash.sampler.getMemberNames;
	
	/**
	 * Objeto base devuelto por los servicios del
	 * servidor. Las demás respuestas deberán
	 * extender esta clase para ser reconocidas.
	 */
	public dynamic class ServiceObject implements IServiceObject
	{
		/**
		 * Toma un objeto Response devuelto por el servicio
		 * y copia las propiedades que correspondan a este
		 * objeto.
		 */
		public function makeFromResponse( response:Response ):void
		{
			for ( var item:String in response )
			{
				try {
					if ( this.hasOwnProperty( item ) )
						this[ item ] = response[ item ];
				}
				catch( error:Error ) {}
			}
		}

		/**
		 * Crea los objetos VO asociados. Cada Objeto de Servicio (SO)
		 * deberá redefinir con override esta función, en el caso de
		 * ser necesario. La misma será invocada automáticamente luego
		 * de la llamada al método makeFromResponse, en la ContentFactory
		 * correspondiente.
		 * 
		 * @proxy
		 */
		public function makeValueObjects():void
		{

		}
		
		public function toString():String
		{
			var param  :Parameter = new Parameter();
			
			for each( var item:String in this ) {
				param.addParam( item, this[item] );
			}
			
			return( param.serialize() );
		}
	}
}